// 全局 OCCT (occt-import-js) 初始化与复用模块
// 提供：preloadOcct() 提前加载，getOcct() 获取实例（自动懒加载），getOcctStatus() 查询状态
// 这样可以在任意组件使用，不必每个组件重复初始化。

import occtimportjs from 'occt-import-js'
import occtWasmUrl from 'occt-import-js/dist/occt-import-js.wasm?url'

let _promise: Promise<any> | null = null
let _instance: any | null = null
let _status: 'idle' | 'loading' | 'ready' | 'error' = 'idle'
let _error: any = null

// 预加载（可在 main.js 中调用）
export function preloadOcct(): Promise<any> {
  if (_status === 'ready') return Promise.resolve(_instance)
  if (_promise) return _promise
  _status = 'loading'
  _promise = occtimportjs({
    locateFile: (f: string) => f === 'occt-import-js.wasm' ? occtWasmUrl : f
  }).then(inst => {
    _instance = inst
    _status = 'ready'
    return inst
  }).catch(e => {
    _error = e
    _status = 'error'
    _promise = null
    console.error('[occt] 初始化失败', e)
    throw e
  })
  return _promise
}

// 获取实例（若未加载则自动调用 preload）
export async function getOcct(): Promise<any> {
  if (_status === 'ready') return _instance
  return preloadOcct()
}

// 获取当前状态（可用于界面显示加载进度或错误重试按钮）
export function getOcctStatus() {
  return { status: _status, error: _error }
}

// 可选：提供一个重试函数
export async function retryOcct(): Promise<any> {
  if (_status !== 'error') return getOcct()
  _status = 'idle'
  _error = null
  return preloadOcct()
}

